package com.xw.comm.service;

import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.UnsupportedCommOperationException;

import java.util.List;
import java.util.TooManyListenersException;

/**
 * 串口操作的接口类
 * @author xiongwei_vendor
 * @date 2020/12/8 19:07
 */
public interface SerialService {

    /**
     * 串口启动
     * @param com 串口号
     * @throws NoSuchPortException 异常
     * @throws PortInUseException 异常
     * @throws UnsupportedCommOperationException 异常
     * @throws TooManyListenersException 异常
     */
    void start(String com) throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException, TooManyListenersException;

    /**
     * 串口停止
     * @param com 串口号
     */
    void stop(String com);

    /**
     * 发送数据
     * @param data 数据
     * @return 发送是否成功
     */
    boolean sendMessage(byte[] data);

    /**
     * 发送数据
     * @param data 数据
     * @return 发送是否成功
     */
    boolean sendMessage(String data);

    /**
     * 核心方法
     *
     * @throws InterruptedException 异常
     */
    void core() throws InterruptedException;

    /**
     * win的测试一些
     * @throws InterruptedException 异常
     */
    void windowsComm() throws InterruptedException;

    /**
     * 取到所有的端口
     * @return 发送是否成功
     * @throws InterruptedException
     */
    List<String> findCommList() throws InterruptedException;

    /**
     * 发送键命令，并且延迟10秒，然后发送按键释放命令，并且延迟10S
     *
     * @param data 发送数据
     * @throws InterruptedException 中断异常
     */
    void sendAndRelease(byte data) throws InterruptedException;

    /**
     * 发送键命令，并且延迟10秒，然后发送按键释放命令，并且延迟10S
     *
     * @param data 发送数据
     * @throws InterruptedException 中断异常
     */
    void sendReleaseTime200(byte data) throws InterruptedException;


    void sendAndReleaseDouble(byte data) throws InterruptedException;

    /**
     * 释放
     * @throws InterruptedException 中断
     */
    void sendRelease() throws InterruptedException;

}
